import router from '@/router'
import store from '@/store'

router.beforeEach(async(to, from, next) => {
  // 写法一
  const url = to.path
  const token = store.getters.token
  const whiteList = ['/login', '/404', '/test']
  // 1 有登陆
  //   1.1 去登陆页 => 跳首页
  if (token && url === '/login') {
    next('/')
  }
  //   1.2 不去登录页 => 放行
  if (token && url !== '/login') {
    // 登录后的正常页面进入之前,确保获取用户数据
    if (Object.keys(store.state.user.profile).length === 0) {
      // 不用每次跳转都拿, 如果已经有过数据就不用拿了
      // {} 永远为 true, 需要判断里面的属性值
      // Object.keys(obj)可以获得属性值组成数组
      await store.dispatch('user/getProfile')
      // 这里拿完数据以后, 当前用户的 menus 就存在
      // 可以进行路由筛选(必须是next之前)
      const menus = store.state.user.profile.roles.menus
      console.log(25, menus)
      // 通过 dispatch 将menus传给filterRoutes函数, store中的
      // action接收menus参数
      const res = await store.dispatch('permission/filterRoutes', menus)
      console.log('导航守卫获取的信息', res)
      // 追加路由配置, 只需要用到 router.addRoutes
      router.addRoutes([
        ...res,
        { path: '*', redirect: '/404', hidden: true }
      ])
      // 追加完路由之后,应该将当前目的地to.path作为路径
      // 重新跳转一次,目的是再次触发导航守卫,才能正常进入页面
      // 不添加页面就会空白
      return next(to.path)
    }
    next()
  }
  // 2 没登录
  //   2.1 在白名单 => 放行
  if (!token && whiteList.indexOf(url) !== -1) {
    next()
  }
  //   2.2 不在白名单 => 跳登录页
  if (!token && whiteList.indexOf(url) === -1) {
    next('/login')
  }

  // 写法二
  // // 是否登陆
  // if (store.getters.token) {
  //   // 已登录
  //   // 是否去登录页
  //   if (to.path === '/login') {
  //     // next 如果传入url可以跳转页面
  //     next('/')
  //   } else {
  //     next()
  //   }
  // } else {
  //   // 未登录
  //   // 判断是否在允许非登陆用户访问白名单中
  //   const whiteList = ['/login', '/404', '/test']
  //   if (whiteList.indexOf(to.path) !== -1) {
  //     // 在白名单随便进
  //     next()
  //   } else {
  //     next('/login')
  //   }
  // }
})
